#ifndef __NETRADIO_PROTO_H__
#define __NETRADIO_PROTO_H__

//具有固定宽度的整数类型
#include <stdint.h>

// 组播地址
#define GROUP_ADDR	"224.2.4.8"
// 接收端口
#define RCV_PORT	11234
#define CHN_NR		200   //频道数量
#define CHN_LIST_ID	0     //频道列表的ID
#define MIN_CHN_ID	1     //频道的最小ID
#define MAX_CHN_ID	(CHN_NR + MIN_CHN_ID - 1)     //频道的最大ID（限制频道的有效ID范围是1到200）
#define MSG_SIZE	512   //表示消息的最大字节数

typedef uint8_t chnid_t;
typedef uint8_t len_t;

/*
频道列表
	0
    1  music
	2  children
	3  opera	
 */
// 单个频道的描述结构
struct list_entry {
	chnid_t chnid;	
	len_t len; // 自述结构长度
	char descr[0]; // 变长结构体
}__attribute__((packed));

// 整个频道列表结构
struct chn_list_st {
	chnid_t chnid; // 0
	struct list_entry entry[0];
}__attribute__((packed));

// 频道数据
struct chn_data_st {
	chnid_t chnid;
	char msg[MSG_SIZE];
}__attribute__((packed));

// 接收数据结构
union chn_recv_st {
	chnid_t chnid;
	struct chn_list_st list;
	struct chn_data_st data;
};

#endif
